﻿using System;
using System.Collections;
using UnityEngine;

public class AnimatorManager : MonoBehaviour
{
    public Animator animator; // 引用Animator组件
    public string triggerName = "Exit"; // 动画触发器名称

    private bool isPlayingAnimation = false; // 是否正在播放动画

    // 定义事件，用于动画完成后的回调
    public event Action OnAnimationCompleteEvent;

    public virtual void Awake()
    {
        // 确保动画控制器已初始化
        if (animator == null)
        {
            animator = GetComponent<Animator>();
        }

    }

    // 开始播放动画
    public void PlayAnimation()
    {
        if (!isPlayingAnimation)
        {
            isPlayingAnimation = true;
            StartCoroutine(WaitForAnimation());
        }
    }
  
    private IEnumerator WaitForAnimation()
    {
        animator.SetTrigger(triggerName); // 触发动画

        // 获取动画片段长度
        AnimationClip animationClip = Array.Find(animator.runtimeAnimatorController.animationClips, clip => clip.name == triggerName);
        if (animationClip != null)
        {
            yield return new WaitForSeconds(animationClip.length); // 等待动画播放完毕
        }
        else
        {
            Debug.LogWarning($"Animation clip '{triggerName}' not found!");
            yield return null;
        }

        isPlayingAnimation = false; // 重置状态

        // 触发事件回调
        OnAnimationCompleteEvent?.Invoke();

        // 动画播放完成后，可以触发回调
        // OnAnimationComplete();
    }
    /// <summary>
    /// 动画播放完成的回调方法
    /// </summary>
    /// <returns></returns>
    //protected virtual void OnAnimationComplete()
    //{
    //    // 可以重写此方法以处理动画完成后的逻辑
    //    Debug.Log("Animation completed: " + triggerName);
    //}
}